home *** CD-ROM | disk | FTP | other *** search
/ BCI NET / BCI NET Dec 94.iso / archives / programming / source / tsm23s.lha / ControlWindow.c < prev    next >
C/C++ Source or Header  |  1993-10-08  |  19KB  |  619 lines

  1. // TSMorph - Amiga Morphing program
  2. // Copyright (C) © 1993  Topicsave Limited
  3.  
  4. // This program is free software; you can redistribute it and/or modify
  5. // it under the terms of the GNU General Public License as published by
  6. // the Free Software Foundation; either version 2 of the License, or
  7. // any later version.
  8.  
  9. // This program is distributed in the hope that it will be useful,
  10. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12. // GNU General Public License for more details.
  13.  
  14. // You should have received a copy of the GNU General Public License
  15. // along with this program; if not, write to the Free Software
  16. // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  17.  
  18. // mpaddock@cix.compulink.co.uk
  19.  
  20. //    $Author: M_J_Paddock $
  21. //    $Date: 1993/09/04 17:42:36 $
  22. //    $Revision: 1.12 $
  23.  
  24. // Include precompiled headers if not already included
  25. #ifndef TSMORPH_H
  26. #include "TSMorph.h"
  27. #endif
  28.  
  29. /* Gadgets in the control window */
  30. extern struct Gadget OneGadget = {
  31.     &TwoGadget,
  32.     0,0,
  33.     IMAGE_WIDTH,IMAGE_HEIGHT,
  34.     GFLG_GADGHIMAGE|GFLG_GADGIMAGE,
  35.     GACT_IMMEDIATE,
  36.     GTYP_BOOLGADGET,
  37.     &One_im,
  38.     &One_imx,
  39.     NULL,
  40.     0,
  41.     NULL,
  42.     ONEGADGET,
  43.     NULL
  44. };
  45. extern struct Gadget TwoGadget = {
  46.     &RelGadget,
  47.     0,0,
  48.     IMAGE_WIDTH,IMAGE_HEIGHT,
  49.     GFLG_GADGHIMAGE|GFLG_GADGIMAGE,
  50.     GACT_IMMEDIATE,
  51.     GTYP_BOOLGADGET,
  52.     &Two_im,
  53.     &Two_imx,
  54.     NULL,
  55.     0,
  56.     NULL,
  57.     TWOGADGET,
  58.     NULL
  59. };
  60. extern struct Gadget RelGadget = {
  61.     &MyAddGadget,
  62.     0,0,
  63.     IMAGE_WIDTH,IMAGE_HEIGHT,
  64.     GFLG_GADGHIMAGE|GFLG_GADGIMAGE,
  65.     GACT_IMMEDIATE,
  66.     GTYP_BOOLGADGET,
  67.     &Rel_im,
  68.     &Rel_imx,
  69.     NULL,
  70.     0,
  71.     NULL,
  72.     RELGADGET,
  73.     NULL
  74. };
  75. extern struct Gadget MyAddGadget = {    // Note not AddGadget as this is a function!
  76.     &DelGadget,
  77.     0,0,
  78.     IMAGE_WIDTH,IMAGE_HEIGHT,
  79.     GFLG_GADGHIMAGE|GFLG_GADGIMAGE,
  80.     GACT_IMMEDIATE,
  81.     GTYP_BOOLGADGET,
  82.     &Add_im,
  83.     &Add_imx,
  84.     NULL,
  85.     0,
  86.     NULL,
  87.     ADDGADGET,
  88.     NULL
  89. };
  90. extern struct Gadget DelGadget = {
  91.     &LinkGadget,
  92.     0,0,
  93.     IMAGE_WIDTH,IMAGE_HEIGHT,
  94.     GFLG_GADGHIMAGE|GFLG_GADGIMAGE,
  95.     GACT_IMMEDIATE,
  96.     GTYP_BOOLGADGET,
  97.     &Del_im,
  98.     &Del_imx,
  99.     NULL,
  100.     0,
  101.     NULL,
  102.     DELGADGET,
  103.     NULL
  104. };
  105. extern struct Gadget LinkGadget = {
  106.     &UnlinkGadget,
  107.     0,0,
  108.     IMAGE_WIDTH,IMAGE_HEIGHT,
  109.     GFLG_GADGHIMAGE|GFLG_GADGIMAGE,
  110.     GACT_IMMEDIATE,
  111.     GTYP_BOOLGADGET,
  112.     &Link_im,
  113.     &Link_imx,
  114.     NULL,
  115.     0,
  116.     NULL,
  117.     LINKGADGET,
  118.     NULL
  119. };
  120. extern struct Gadget UnlinkGadget = {
  121.     &NoneGadget,
  122.     0,0,
  123.     IMAGE_WIDTH,IMAGE_HEIGHT,
  124.     GFLG_GADGHIMAGE|GFLG_GADGIMAGE,
  125.     GACT_IMMEDIATE,
  126.     GTYP_BOOLGADGET,
  127.     &Unlink_im,
  128.     &Unlink_imx,
  129.     NULL,
  130.     0,
  131.     NULL,
  132.     UNLINKGADGET,
  133.     NULL
  134. };
  135. extern struct Gadget NoneGadget = {
  136.     &stGadget,
  137.     0,0,
  138.     IMAGE_WIDTH,IMAGE_HEIGHT,
  139.     GFLG_GADGHIMAGE|GFLG_GADGIMAGE|GFLG_SELECTED,
  140.     GACT_IMMEDIATE,
  141.     GTYP_BOOLGADGET,
  142.     &None_im,
  143.     &None_imx,
  144.     NULL,
  145.     0,
  146.     NULL,
  147.     NONEGADGET,
  148.     NULL
  149. };
  150. extern struct Gadget stGadget = {
  151.     &prevGadget,
  152.     0,0,
  153.     AIMAGE,AIMAGE,
  154.     GFLG_GADGHIMAGE|GFLG_GADGIMAGE,
  155.     GACT_RELVERIFY,
  156.     GTYP_BOOLGADGET,
  157.     &st_im,
  158.     &st_imx,
  159.     NULL,
  160.     0,
  161.     NULL,
  162.     STGADGET,
  163.     NULL
  164. };
  165. extern struct Gadget prevGadget = {
  166.     &gotoGadget,
  167.     0,0,
  168.     AIMAGE,AIMAGE,
  169.     GFLG_GADGHIMAGE|GFLG_GADGIMAGE,
  170.     GACT_RELVERIFY,
  171.     GTYP_BOOLGADGET,
  172.     &prev_im,
  173.     &prev_imx,
  174.     NULL,
  175.     0,
  176.     NULL,
  177.     PREVGADGET,
  178.     NULL
  179. };
  180. extern struct Gadget gotoGadget = {
  181.     &nextGadget,
  182.     0,0,
  183.     AIMAGE+1,AIMAGE,
  184.     GFLG_GADGHIMAGE|GFLG_GADGIMAGE,
  185.     GACT_RELVERIFY,
  186.     GTYP_BOOLGADGET,
  187.     &goto_im,
  188.     &goto_imx,
  189.     NULL,
  190.     0,
  191.     NULL,
  192.     GOTOGADGET,
  193.     NULL
  194. };
  195. extern struct Gadget nextGadget = {
  196.     &lastGadget,
  197.     0,0,
  198.     AIMAGE,AIMAGE,
  199.     GFLG_GADGHIMAGE|GFLG_GADGIMAGE,
  200.     GACT_RELVERIFY,
  201.     GTYP_BOOLGADGET,
  202.     &next_im,
  203.     &next_imx,
  204.     NULL,
  205.     0,
  206.     NULL,
  207.     NEXTGADGET,
  208.     NULL
  209. };
  210. extern struct Gadget lastGadget = {
  211.     NULL,
  212.     0,0,
  213.     AIMAGE,AIMAGE,
  214.     GFLG_GADGHIMAGE|GFLG_GADGIMAGE,
  215.     GACT_RELVERIFY,
  216.     GTYP_BOOLGADGET,
  217.     &last_im,
  218.     &last_imx,
  219.     NULL,
  220.     0,
  221.     NULL,
  222.     LASTGADGET,
  223.     NULL
  224. };
  225.  
  226. /* Menu for the Control Window - comments on the right are the array index */
  227. extern struct NewMenu MyNewMenu[] = {    // There must be an easier way!
  228.     { NM_TITLE, "Project",NULL,0,0,NULL },            // 0
  229.         { NM_ITEM,"New Points","N",0,0,0 },            // 1
  230.         { NM_ITEM,"Open Points...","O",0,0,0 },    // 2
  231.        { NM_ITEM,NM_BARLABEL,NULL,0,0,NULL },        // 3
  232.        { NM_ITEM,"Save","S",0,0,0},                    // 4
  233.        { NM_ITEM,"Save As...","A",0,0,0},            // 5
  234.        { NM_ITEM,NM_BARLABEL,NULL,0,0,NULL },        // 6
  235.         { NM_ITEM,"About...",NULL,0,0,0 },            // 7
  236.        { NM_ITEM,NM_BARLABEL,NULL,0,0,NULL },        // 8
  237.         { NM_ITEM,"Exit Points",NULL,0,0,0 },        // 9
  238.        { NM_ITEM,NM_BARLABEL,NULL,0,0,NULL },        // 10
  239.         { NM_ITEM,"Quit","Q",0,0,0 },                    // 11
  240.        { NM_ITEM,NM_BARLABEL,NULL,0,0,NULL },        // 12
  241.         { NM_ITEM,"Preview...",NULL,0,0,NULL },    // 13
  242.     { NM_TITLE, "Edit",0,0,0,NULL},                    // 14
  243.         { NM_ITEM,"Add Grid...","G",0,0,0 },        // 15
  244.        { NM_ITEM,"Frame",NULL,0,0,NULL },            // 16
  245.             { NM_SUB,"First","<",0,0,0 },                // 17
  246.             { NM_SUB,"Previous","-",0,0,0 },            // 18
  247.             { NM_SUB,"Goto...",".",0,0,0 },            // 19
  248.             { NM_SUB,"Next","+",0,0,0 },                // 20
  249.             { NM_SUB,"Last",">",0,0,0 },                // 21
  250.         { NM_ITEM,"Mode",0,0,0,NULL },                                        // 22
  251.             { NM_SUB, "Edit One","1",CHECKIT,~1,NULL },                    // 23
  252.             { NM_SUB, "Edit Two","2",CHECKIT,~2,NULL },                    // 24
  253.             { NM_SUB, "Edit Rel","3",CHECKIT,~4,NULL },                    // 25
  254.             { NM_SUB, "Add",     "4",CHECKIT,~8,NULL },                    // 26
  255.             { NM_SUB, "Delete",  "5",CHECKIT,~16,NULL },                    // 27
  256.             { NM_SUB, "Link",    "6",CHECKIT,~32,NULL },                    // 28
  257.             { NM_SUB, "Unlink",  "7",CHECKIT,~64,NULL },                    // 29
  258.             { NM_SUB, "None",    "8",CHECKIT|CHECKED,~128,NULL },        // 30
  259.     { NM_TITLE, "Settings",0,0,0,NULL },                                    //    31
  260.         { NM_ITEM,"Create Icons?",NULL, CHECKIT|MENUTOGGLE,0,NULL },            // 32
  261.         { NM_ITEM,"Change Palette?","P", CHECKIT|MENUTOGGLE,0,NULL },            // 33
  262.         { NM_ITEM,"Zoom?","Z", CHECKIT|MENUTOGGLE,0,NULL },            //             34
  263.         { NM_ITEM,"Open Mode",NULL,0,NULL},                                    //                35
  264.             { NM_SUB, "ILBM Always",NULL,CHECKIT,~1,NULL },                //                36
  265.             { NM_SUB, "ILBM If ILBM",NULL,CHECKIT,~2,NULL },            //                37
  266.             { NM_SUB, "ILBM If Colours",NULL,CHECKIT,~4,NULL },        //                38
  267.             { NM_SUB, "Remap",NULL,CHECKIT,~8,NULL },                        //                39
  268.             { NM_SUB, "Opal",NULL,CHECKIT,~16,NULL },                        //                40
  269.         { NM_ITEM,"Public Screen...",NULL,0,NULL},                        //                41
  270.         { NM_ITEM,"Custom Mode...",NULL,0,NULL},                            //                42
  271.         { NM_ITEM,"Custom Depth...",NULL,0,NULL},                            //                43
  272.         { NM_ITEM,"Preview Script...",NULL,0,NULL},                        //                44
  273.        { NM_ITEM,NM_BARLABEL,NULL,0,0,NULL },                                //             45
  274.        { NM_ITEM,"Create Prefs Icons?",NULL,CHECKIT|MENUTOGGLE,NULL},//            46
  275.        { NM_ITEM,"Keep Settings?",NULL,CHECKIT|MENUTOGGLE,NULL},    //                47
  276.         { NM_ITEM,"Load Settings...", NULL, 0, NULL },                    //             48
  277.        { NM_ITEM,"Save Settings", NULL, 0, NULL },                        //             49
  278.        { NM_ITEM,"Save Settings As...", NULL, 0, NULL },                //             50
  279.        { NM_ITEM,NM_BARLABEL,NULL,0,0,NULL },                                //             51
  280.         { NM_ITEM,"Create Render Icons?",NULL, CHECKIT|MENUTOGGLE,NULL },//        52
  281.        { NM_ITEM,"DX...",NULL,0,NULL},                                        //                53
  282.        { NM_ITEM,"DY...",NULL,0,NULL},                                        //                54
  283.        { NM_ITEM,"Load Script...",NULL,0,NULL},                            //                55
  284.        { NM_ITEM,"Pre Script...",NULL,0,NULL},                            //                56
  285.        { NM_ITEM,"Post Script...",NULL,0,NULL},                            //                57
  286.        { NM_ITEM,"Depth...",NULL,0,NULL},                                    //                58
  287.        { NM_ITEM,"Mode",NULL,0,NULL},                                        //                59
  288.             { NM_SUB, "Quick(0)",NULL,CHECKIT,~1,NULL },                    //                60
  289.             { NM_SUB, "Quick Stationary(1)",NULL,CHECKIT,~2,NULL },    //                61
  290.             { NM_SUB, "Closest(2)",NULL,CHECKIT,~4,NULL },                //                62
  291.             { NM_SUB, "Closest Stationary(3)",NULL,CHECKIT,~8,NULL },//                63
  292.        { NM_ITEM,"Save Format", NULL, 0, NULL },                            //             64
  293.             { NM_SUB, "ILBM 24",NULL,CHECKIT,~1,NULL },                    //                65
  294.             { NM_SUB, "Opal 24",NULL,CHECKIT,~2,NULL },                    //                66
  295.             { NM_SUB, "Opal 24 Thumbnail",NULL,CHECKIT,~4,NULL },        //                67
  296.             { NM_SUB, "Opal 24 Fast",NULL,CHECKIT,~8,NULL },            //                68
  297.             { NM_SUB, "Opal 24 Fast Thumbnail",NULL,CHECKIT,~16,NULL },    //            69
  298.             { NM_SUB, "Opal JPEG",NULL,CHECKIT,~32,NULL },                //                70
  299.             { NM_SUB, "Opal JPEG Thumbnail",NULL,CHECKIT,~64,NULL },    //                71
  300.             { NM_SUB, "PPM (P6)",NULL,CHECKIT,~128,NULL },                //                72
  301.             { NM_SUB, "B&W 16",NULL,CHECKIT,~256,NULL },                    //                73
  302.             { NM_SUB, "B&W 256",NULL,CHECKIT,~512,NULL },                //                74
  303.             { NM_SUB, "HAM 6",NULL,CHECKIT,~1024,NULL },                    //                75
  304.             { NM_SUB, "HAM 8",NULL,CHECKIT,~2048,NULL },                    //                76
  305.             { NM_SUB, "DCTV 3",NULL,CHECKIT,~4096,NULL },                //                77
  306.             { NM_SUB, "DCTV 4",NULL,CHECKIT,~8192,NULL },                //                78
  307.        { NM_ITEM,"JPEG Quality...", NULL, 0, NULL },                    //             79
  308.        { NM_ITEM,"Render Screen...", NULL, 0, NULL },                    //                80
  309.        { NM_ITEM,"Anti-Alias?",NULL,CHECKIT|MENUTOGGLE,NULL },        //                81
  310.        { NM_ITEM,NM_BARLABEL,NULL,0,0,NULL },                                //             82
  311.         { NM_ITEM,"Reset To Defaults",NULL,0,NULL },                        //                83
  312.         { NM_ITEM,"Last Saved",NULL,0,NULL },                                //                84
  313.         { NM_ITEM,"Restore",NULL,0,NULL },                                    //                85
  314.       { NM_ITEM,NM_BARLABEL,NULL,0,0,NULL },                                    //             86
  315.     { NM_ITEM,"Continuous Help?",NULL,CHECKIT|MENUTOGGLE,NULL },    //                87
  316.    { NM_END,NULL,NULL,0,0,NULL }
  317. };
  318.  
  319. /* Screen and VisualInfo for ControlWindow    */
  320. static struct Screen         *Screen    = NULL;
  321. static struct VisualInfo    *VisInfo    = NULL;
  322.  
  323. /* The Window and its menus and (animated) screen title    */
  324. extern struct Window            *ControlWindow    = NULL;
  325. extern struct Menu             *MyMenu             = NULL;
  326. extern UBYTE                    *CWTitle            = "TSMorph - Frame    ";    // note spaces at end for frame number!
  327.  
  328. /* Open the Control Window
  329.  * Not really sure why it returns a Struct Window *
  330.  * as ControlWindow is set up inside this function anyway
  331.  * should really be a BOOL
  332.  */
  333. struct Window *
  334. OpenControlWindow(void) {
  335.     ULONG HNum;            // The current edit mode is displayed as help
  336.     switch (Mode) {
  337.     case EDIT1:
  338.         HNum = H_EOne;
  339.         break;
  340.     case EDIT2:
  341.         HNum = H_ETwo;
  342.         break;
  343.     case EDITREL:
  344.         HNum = H_ERel;
  345.         break;
  346.     case ADD:
  347.         HNum = H_EAdd;
  348.         break;
  349.     case DELETE:
  350.         HNum = H_EDel;
  351.         break;
  352.     case LINK1:
  353.         HNum = H_ELnk;
  354.         break;
  355.     case UNLINK1:
  356.         HNum = H_EUnl;
  357.         break;
  358.     case NONE:
  359.         HNum = H_EMov;
  360.         break;
  361.     }
  362.     if (Screen = LockPubScreen(PubScreenName)) {        /* Supplied in PUBSCREEN=    */
  363.         // Dynamically position all the gadgets (actually only based on window top border)
  364.         /* Gadgets in the left column */
  365.         OneGadget.LeftEdge =
  366.             RelGadget.LeftEdge =
  367.             DelGadget.LeftEdge =
  368.             UnlinkGadget.LeftEdge =
  369.             stGadget.LeftEdge = Screen->WBorLeft; 
  370.         /* Gadgets in the right column */
  371.         TwoGadget.LeftEdge =
  372.             MyAddGadget.LeftEdge =
  373.             LinkGadget.LeftEdge =
  374.             NoneGadget.LeftEdge = Screen->WBorLeft + IMAGE_WIDTH;
  375.         prevGadget.LeftEdge = Screen->WBorLeft + AIMAGE;
  376.         gotoGadget.LeftEdge = Screen->WBorLeft + (AIMAGE+AIMAGE);
  377.         nextGadget.LeftEdge = Screen->WBorLeft + (AIMAGE+AIMAGE+AIMAGE+1);    // +1 as gotoGadget is 1 wider
  378.         lastGadget.LeftEdge = Screen->WBorLeft + (AIMAGE+AIMAGE+AIMAGE+1+AIMAGE);
  379.         /* Gadgets in top row */
  380.         OneGadget.TopEdge =
  381.             TwoGadget.TopEdge = Screen->WBorTop + Screen->Font->ta_YSize+1;
  382.         /* Gadgets in 2nd row */
  383.         RelGadget.TopEdge =
  384.             MyAddGadget.TopEdge = Screen->WBorTop + Screen->Font->ta_YSize+1+(IMAGE_HEIGHT);
  385.         /* Gadgets in 3rd row */
  386.         DelGadget.TopEdge =
  387.             LinkGadget.TopEdge = Screen->WBorTop + Screen->Font->ta_YSize+1+(IMAGE_HEIGHT+IMAGE_HEIGHT);
  388.         /* Gadgets in bottom (-1) row */
  389.         UnlinkGadget.TopEdge =
  390.             NoneGadget.TopEdge = Screen->WBorTop + Screen->Font->ta_YSize+1+(IMAGE_HEIGHT+IMAGE_HEIGHT+IMAGE_HEIGHT);
  391.         /* Arrow gadgets */
  392.         stGadget.TopEdge =
  393.             prevGadget.TopEdge =
  394.             gotoGadget.TopEdge =
  395.             nextGadget.TopEdge =
  396.             lastGadget.TopEdge = Screen->WBorTop + Screen->Font->ta_YSize+1+(IMAGE_HEIGHT+IMAGE_HEIGHT+IMAGE_HEIGHT+IMAGE_HEIGHT);
  397.         if ((SinglePicture == 2) || (SinglePicture == 3)) {        // Animated so set screen title
  398.             sprintf(CWTitle,"TSMorph - Frame %03ld",FrameNumber);
  399.         }
  400.         else {
  401.             strcpy(CWTitle,"TSMorph");                                        // Otherwise default
  402.         }
  403.         /* Open the window, in a default position */
  404.         if (ControlWindow = OpenWindowTags(NULL,
  405.                                         WA_Gadgets,         &OneGadget,
  406.                                         WA_IDCMP,            IDCMP_MENUPICK | IDCMP_CLOSEWINDOW | IDCMP_MENUHELP |
  407.                                                                 IDCMP_GADGETDOWN | IDCMP_RAWKEY | IDCMP_VANILLAKEY | IDCMP_GADGETUP |
  408.                                                                 IDCMP_GADGETHELP | IDCMP_MOUSEMOVE,
  409.                                         WA_SimpleRefresh, TRUE,
  410.                                         WA_Flags,            WFLG_DRAGBAR | WFLG_DEPTHGADGET | WFLG_CLOSEGADGET |
  411.                                                                 WFLG_NOCAREREFRESH,
  412.                                         WA_PubScreen,         Screen,
  413.                                    WA_Width,            Screen->WBorLeft + Screen->WBorRight + 
  414.                                                                (IMAGE_WIDTH+IMAGE_WIDTH),
  415.                                    WA_Height,            Screen->WBorTop + Screen->Font->ta_YSize + 1 +
  416.                                                                Screen->WBorBottom +
  417.                                                                (IMAGE_HEIGHT+IMAGE_HEIGHT+IMAGE_HEIGHT+IMAGE_HEIGHT+AIMAGE),
  418.                                    WA_Left,                0,            // left edge of screen
  419.                                    WA_Top,                TSMorphWnd->TopEdge + Rect[GD_Help].MaxY + 2,
  420.                                         WA_ScreenTitle,    CWTitle,    //    Top edge means help gadget is still visible
  421.                                         WA_Title,            "Mov",    // This is wrong - could be a different mode ?
  422.                                         WA_MenuHelp,        TRUE,
  423.                                         WA_NewLookMenus,    TRUE,
  424.                                         TAG_DONE)) {
  425.            if (IntuitionBase->lib_Version > 38) {            // If running 3.0+ turn on gadget help
  426.                 HelpControl(ControlWindow,HC_GADGETHELP);
  427.             }
  428.             UpdateMenuDefs();                                        // Update the menu off/on/checks etc.
  429.          /* Create,layout and add the menu    */
  430.             if (MyMenu = CreateMenus(MyNewMenu,
  431.                                         GTMN_FullMenu,TRUE,
  432.                                         TAG_END)) {
  433.                 if (VisInfo = GetVisualInfo(Screen, TAG_END)) {
  434.                     if (LayoutMenus(MyMenu,VisInfo,
  435.                                             GTMN_NewLookMenus,TRUE,
  436.                                             TAG_END)) {
  437.                         if (SetMenuStrip(ControlWindow,MyMenu)) {
  438.                             // display either full or short help
  439.                             if (GHelp) {
  440.                                 help(HNum);
  441.                             }
  442.                             else {
  443.                                 ihelp(HNum);
  444.                             }
  445.                             return ControlWindow;        /* Success !!!                        */
  446.                         }
  447.                     }
  448.                 }
  449.             }
  450.         }
  451.     }
  452.     /* Something failed so clear everything down    */
  453.     CloseControlWindow();
  454.     return NULL;
  455. }
  456.         
  457.  
  458. /* Close the Control Window
  459.  * or at least as much as it is open
  460.  * Clearing down all variables
  461.  */
  462. void
  463. CloseControlWindow(void) {
  464.     if (ControlWindow) {
  465.         ClearMenuStrip(ControlWindow);
  466.     }
  467.     if (VisInfo) {
  468.         FreeVisualInfo(VisInfo);
  469.         VisInfo = NULL;
  470.     }
  471.     if (MyMenu) {
  472.         FreeMenus(MyMenu);
  473.         MyMenu = NULL;
  474.     }
  475.     if (ControlWindow) {
  476.         CloseWindow(ControlWindow);
  477.         ControlWindow = NULL;
  478.     }
  479.     if (Screen) {
  480.         UnlockPubScreen(NULL,Screen);
  481.         Screen = NULL;
  482.     }
  483. }
  484.  
  485. /* Update the new menu array based on the current settings
  486.  * updates enabled/disabled status
  487.  * and checkmarks
  488.  */
  489. void
  490. UpdateMenuDefs(void) {
  491.     if ((SinglePicture == 2) || (SinglePicture == 3)) {    // No frame controls if not anim
  492.       MyNewMenu[NM_FRAME].nm_Flags &= ~NM_ITEMDISABLED;
  493.     }
  494.     else {
  495.       MyNewMenu[NM_FRAME].nm_Flags |= NM_ITEMDISABLED;
  496.     }
  497.    if (CreateIcons) {                            /* Supplied in CREATEICONS=    */
  498.       MyNewMenu[NM_CREATEICONS].nm_Flags |= CHECKED;
  499.    }
  500.    else {
  501.       MyNewMenu[NM_CREATEICONS].nm_Flags &= ~CHECKED;
  502.    }
  503.    if (CreateIconsP) {                            /* Supplied in CREATEICONSP=    */
  504.       MyNewMenu[NM_ICONSP].nm_Flags |= CHECKED;
  505.    }
  506.    else {
  507.       MyNewMenu[NM_ICONSP].nm_Flags &= ~CHECKED;
  508.    }
  509.    if (KeepSettings) {                            /* Supplied in KEEPSETTINGS=    */
  510.       MyNewMenu[NM_KEEPS].nm_Flags |= CHECKED;
  511.    }
  512.    else {
  513.       MyNewMenu[NM_KEEPS].nm_Flags &= ~CHECKED;
  514.    }
  515.     if (PaletteAllowed) {                        /* Supplied in CHANGEPALETTE=    */
  516.       MyNewMenu[NM_CHANGEPALETTE].nm_Flags &= ~NM_ITEMDISABLED;
  517.     }
  518.     else {
  519.       MyNewMenu[NM_CHANGEPALETTE].nm_Flags |= NM_ITEMDISABLED;
  520.     }
  521.    if (palette) {                                    /* Supplied in CHANGEPALETTE=    */
  522.       MyNewMenu[NM_CHANGEPALETTE].nm_Flags |= CHECKED;
  523.    }
  524.    else {
  525.       MyNewMenu[NM_CHANGEPALETTE].nm_Flags &= ~CHECKED;
  526.    }
  527.     if (ZoomAllowed) {                            /* Supplied in ZOOM=                */
  528.       MyNewMenu[NM_ZOOM].nm_Flags &= ~NM_ITEMDISABLED;
  529.     }
  530.     else {
  531.       MyNewMenu[NM_ZOOM].nm_Flags |= NM_ITEMDISABLED;
  532.     }
  533.    if (Zoom) {                                        /* Supplied in ZOOM=                */
  534.       MyNewMenu[NM_ZOOM].nm_Flags |= CHECKED;
  535.    }
  536.    else {
  537.       MyNewMenu[NM_ZOOM].nm_Flags &= ~CHECKED;
  538.    }
  539.    if (AntiAlias) {                                /* Supplied in ANTIALIAS=        */
  540.       MyNewMenu[NM_ANTIALIAS].nm_Flags |= CHECKED;
  541.    }
  542.    else {
  543.       MyNewMenu[NM_ANTIALIAS].nm_Flags &= ~CHECKED;
  544.    }
  545.    if (!ReqToolsBase) {                            // No reqtools.library so disable all string and int requesters
  546.        MyNewMenu[NM_SCREEN].nm_Flags |= NM_ITEMDISABLED;
  547.        MyNewMenu[NM_DX].nm_Flags |= NM_ITEMDISABLED;
  548.        MyNewMenu[NM_DY].nm_Flags |= NM_ITEMDISABLED;
  549.        MyNewMenu[NM_LOADSCRIPT].nm_Flags |= NM_ITEMDISABLED;
  550.        MyNewMenu[NM_PRESCRIPT].nm_Flags |= NM_ITEMDISABLED;
  551.        MyNewMenu[NM_POSTSCRIPT].nm_Flags |= NM_ITEMDISABLED;
  552.        MyNewMenu[NM_DEPTH].nm_Flags |= NM_ITEMDISABLED;
  553.        MyNewMenu[NM_QUALITY].nm_Flags |= NM_ITEMDISABLED;
  554.        MyNewMenu[NM_SCREENR].nm_Flags |= NM_ITEMDISABLED;
  555.        MyNewMenu[NM_PPREVIEW].nm_Flags |= NM_ITEMDISABLED;
  556.        MyNewMenu[NM_SPREVIEW].nm_Flags |= NM_ITEMDISABLED;
  557.        MyNewMenu[NM_CUSTOM].nm_Flags |= NM_ITEMDISABLED;
  558.        MyNewMenu[NM_CDEPTH].nm_Flags |= NM_ITEMDISABLED;
  559.        TSMorphNewMenu[12].nm_Flags |= NM_ITEMDISABLED;
  560.    }
  561.    if (!OpalBase) {                                // No opal.library so disable opal output formats and input mode
  562.        MyNewMenu[NM_OPAL24].nm_Flags |= NM_ITEMDISABLED;
  563.        MyNewMenu[NM_OPAL24T].nm_Flags |= NM_ITEMDISABLED;
  564.        MyNewMenu[NM_OPAL24F].nm_Flags |= NM_ITEMDISABLED;
  565.        MyNewMenu[NM_OPAL24FT].nm_Flags |= NM_ITEMDISABLED;
  566.        MyNewMenu[NM_OPALJPEG].nm_Flags |= NM_ITEMDISABLED;
  567.        MyNewMenu[NM_OPALJPEGT].nm_Flags |= NM_ITEMDISABLED;
  568.        MyNewMenu[NM_QUALITY].nm_Flags |= NM_ITEMDISABLED;
  569.        MyNewMenu[NM_ILBMOPAL].nm_Flags |= NM_ITEMDISABLED;
  570.    }
  571.    if (!DCTVBase) {                                // no dctv.library so disable dctv output formats
  572.        MyNewMenu[NM_DCTV3].nm_Flags |= NM_ITEMDISABLED;
  573.        MyNewMenu[NM_DCTV4].nm_Flags |= NM_ITEMDISABLED;
  574.    }
  575.    if (CreateIconsR) {                            /* Supplied in CREATEICONSR=    */
  576.       MyNewMenu[NM_ICONSR].nm_Flags |= CHECKED;
  577.    }
  578.    else {
  579.       MyNewMenu[NM_ICONSR].nm_Flags &= ~CHECKED;
  580.    }
  581.    if (GHelp) {                                    /* Supplied in HELP=                */
  582.       MyNewMenu[NM_HELP].nm_Flags |= CHECKED;
  583.    }
  584.    else {
  585.       MyNewMenu[NM_HELP].nm_Flags &= ~CHECKED;
  586.    }
  587.    if (!handle) {                                    // Have not managed to open amigaguide help file
  588.        MyNewMenu[NM_HELP].nm_Flags |= NM_ITEMDISABLED;
  589.    }
  590.    // Switch off all modes except current
  591.     MyNewMenu[NM_MODE0].nm_Flags &= ~CHECKED;
  592.     MyNewMenu[NM_MODE1].nm_Flags &= ~CHECKED;
  593.     MyNewMenu[NM_MODE2].nm_Flags &= ~CHECKED;
  594.     MyNewMenu[NM_MODE3].nm_Flags &= ~CHECKED;
  595.     MyNewMenu[NM_MODE0+RenderMode].nm_Flags |= CHECKED;
  596.     // switch off all output formats except current
  597.     MyNewMenu[NM_ILBM24].nm_Flags &= ~CHECKED;
  598.     MyNewMenu[NM_OPAL24].nm_Flags &= ~CHECKED;
  599.     MyNewMenu[NM_OPAL24T].nm_Flags &= ~CHECKED;
  600.     MyNewMenu[NM_OPAL24F].nm_Flags &= ~CHECKED;
  601.     MyNewMenu[NM_OPAL24FT].nm_Flags &= ~CHECKED;
  602.     MyNewMenu[NM_OPALJPEG].nm_Flags &= ~CHECKED;
  603.     MyNewMenu[NM_OPALJPEGT].nm_Flags &= ~CHECKED;
  604.     MyNewMenu[NM_PBM].nm_Flags &= ~CHECKED;
  605.     MyNewMenu[NM_BW16].nm_Flags &= ~CHECKED;
  606.     MyNewMenu[NM_BW256].nm_Flags &= ~CHECKED;
  607.     MyNewMenu[NM_HAM6].nm_Flags &= ~CHECKED;
  608.     MyNewMenu[NM_HAM8].nm_Flags &= ~CHECKED;
  609.     MyNewMenu[NM_DCTV3].nm_Flags &= ~CHECKED;
  610.     MyNewMenu[NM_DCTV4].nm_Flags &= ~CHECKED;
  611.     MyNewMenu[NM_ILBM24+SaveFormat].nm_Flags |= CHECKED;
  612.     // switch off all input modes except current
  613.     MyNewMenu[NM_ILBMALWAYS].nm_Flags &= ~CHECKED;
  614.     MyNewMenu[NM_ILBMIFILBM].nm_Flags &= ~CHECKED;
  615.     MyNewMenu[NM_ILBMIFCOLOURS].nm_Flags &= ~CHECKED;
  616.     MyNewMenu[NM_ILBMOPAL].nm_Flags &= ~CHECKED;
  617.     MyNewMenu[NM_ILBMALWAYS+OpenMode].nm_Flags |= CHECKED;
  618. }
  619.